Beancount Accounting Skill Beancount is a plain-text double-entry accounting system. This skill provides expertise for creating, editing, and querying beancount files. Core Concepts Double-Entry Accounting Every transaction must balance to zero. Money flows between accounts: Debits increase Assets/Expenses, decrease Liabilities/Income/Equity Credits decrease Assets/Expenses, increase Liabilities/Income/Equity Five Account Types Type Purpose Normal Balance Assets What you own (bank accounts, investments) Positive Liabilities What you owe (credit cards, loans) Negative Income Money coming in (salary, interest) Negative Expenses Money going out (food, rent) Positive Equity Net worth, opening balances Negative Account Naming Use colon-separated hierarchical names starting with capital letters: Type:Country:Institution:Account:SubAccount Examples: Assets:Checking:Centennial:Joint Liabilities:Card:Chase:Sapphire Expenses:Food:Groceries Income:Salary:Employer Transaction Syntax Basic Format YYYY-MM-DD flag "Payee" "Narration" Account1 Amount Currency Account2 Amount Currency ; optional comment Flags * - Cleared/completed transaction ! - Pending/needs review Examples Simple expense: 2026-01-03 * "Starbucks" "Morning coffee" Expenses:Food:Coffee 5.75 USD Liabilities:Card:Chase:Sapphire Paycheck with multiple postings: 2026-01-15 * "Employer" "Bi-weekly salary" Assets:Checking:Main 3500.00 USD Expenses:Taxes:Federal 800.00 USD Expenses:Taxes:State 200.00 USD Expenses:Insurance:Health 150.00 USD Income:Salary -4650.00 USD Transfer between accounts: 2026-01-10 * "Transfer to savings" Assets:Savings:Ally 500.00 USD Assets:Checking:Main -500.00 USD Amount Interpolation One posting amount can be omitted - beancount calculates it: 2026-01-03 * "Grocery Store" "Weekly groceries" Expenses:Food:Groceries 125.43 USD Assets:Checking:Main ; Amount calculated as -125.43 USD Essential Directives open / close Declare account lifecycle: 2026-01-01 open Assets:Checking:Main USD 2028-12-31 close Assets:Checking:Main balance Assert account balance at start of day (catches errors): 2026-01-31 balance Assets:Checking:Main 4583.84 USD pad Auto-generate balancing entry between two dates: 2026-01-01 pad Assets:Checking:Main Equity:Opening-Balances 2026-01-02 balance Assets:Checking:Main 4583.84 USD include Split files for organization: include "2026-01.beancount" include "accounts.beancount" option Configure beancount behavior: option "title" "Personal Finances" option "operating_currency" "USD" Metadata and Tags Metadata Attach key-value pairs to directives or postings: 2026-01-03 * "Amazon" "Office supplies" order-id: "123-456-789" Expenses:Office 45.00 USD category: "equipment" Liabilities:Card:Chase Tags and Links Group related transactions: 2026-01-15 * "Hotel" "Conference lodging" #work-travel #conference-2026 Expenses:Travel:Lodging 299.00 USD Liabilities:Card:Chase 2026-02-01 * "Expense Report" "Reimbursement" ^conference-2026 Assets:Checking:Main 299.00 USD Income:Reimbursements BQL Queries Beancount Query Language (BQL) provides SQL-like queries. Run with bean-query : bean-query finances/2026.beancount "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY 1" Common Queries Account balance: SELECT account , sum ( position ) WHERE account ~ 'Assets:Checking' GROUP BY 1 Monthly expenses by category: SELECT MONTH ( date ) , account , sum ( position ) WHERE account ~ 'Expenses' AND year = 2026 GROUP BY 1 , 2 ORDER BY 1 , 2 Transactions for an account: SELECT date , narration , payee , position , balance WHERE account = 'Assets:Checking:Centennial:Joint' ORDER BY date Key BQL Functions Function Purpose SUM(position) Aggregate amounts YEAR(date) , MONTH(date) Extract date parts COST(position) Get cost basis account ~ 'pattern' Regex match account Working with Beancount Files Reading Files Before editing, read the beancount file to understand: Existing account structure Naming conventions used Transaction patterns Include file organization Adding Transactions Match existing account names exactly Use consistent payee/narration style Ensure transaction balances to zero Add to chronologically appropriate location or include file Validation Run bean-check to validate syntax: bean-check finances/2026.beancount Common Patterns Credit card payment: 2026-01-25 * "Chase" "Credit card payment" Liabilities:Card:Chase:Sapphire 500.00 USD Assets:Checking:Main -500.00 USD Investment purchase with cost basis: 2026-01-20 * "Fidelity" "Buy index fund" Assets:Investments:Fidelity:FXAIX 10 FXAIX {150.00 USD} Assets:Investments:Fidelity:Cash -1500.00 USD Mortgage payment breakdown: 2026-01-01 * "Rocket Mortgage" "Monthly mortgage" Liabilities:Loan:RocketMortgage 800.00 USD ; Principal Expenses:Housing:Interest 900.00 USD ; Interest Expenses:Housing:Escrow 300.00 USD ; Escrow Assets:Checking:Main -2000.00 USD Best Practices File Organization Use include to split by month or category Keep account definitions in main file Add transactions to appropriate include files Account Hierarchy Be consistent with naming depth Use specific subcategories for visibility Group related accounts logically Balance Assertions Add monthly balance assertions for bank accounts Reconcile against actual statements Catches data entry errors early Error Prevention Always run bean-check after edits Use balance assertions frequently Keep transactions in chronological order Additional Resources Reference Files For detailed syntax and patterns, consult: references/syntax.md - Complete directive reference with all options references/bql.md - Full BQL query language documentation references/examples.md - Common transaction patterns and workflows Command Line Tools Command Purpose bean-check file.beancount Validate syntax bean-query file.beancount "QUERY" Run BQL query bean-report file.beancount balances Balance report bean-web file.beancount Web interface
beancount accounting
安装
npx skills add https://github.com/ouachitalabs/skills --skill 'Beancount Accounting'